{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[NbConvertApp] Converting notebook seqInit.ipynb to python\n",
      "[NbConvertApp] Writing 1367 bytes to seqInit.py\n"
     ]
    }
   ],
   "source": [
    "!jupyter nbconvert --to python seqInit.ipynb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "### LSTM模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f9658918128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dataSet shape :\t (144, 1)\n",
      "train data shape : (120, 1)\n",
      "real data shape : (144, 1)\n"
     ]
    }
   ],
   "source": [
    "# 引入torch相关模块\n",
    "import torch\n",
    "from torch import nn, optim\n",
    "from torch.autograd import Variable\n",
    "from torch.nn import init\n",
    "\n",
    "# 引入初始化文件中的相关内容\n",
    "from seqInit import toTs, cudAvl\n",
    "from seqInit import input_size\n",
    "from seqInit import train, real\n",
    "\n",
    "# 引入画图工具\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义LSTM模型\n",
    "\n",
    "class lstmModel(nn.Module) :\n",
    "    def __init__(self, in_dim, hidden_dim, out_dim, layer_num) :\n",
    "        super().__init__()\n",
    "        self.lstmLayer = nn.LSTM(in_dim, hidden_dim, layer_num)\n",
    "        self.relu = nn.ReLU()\n",
    "        self.fcLayer = nn.Linear(hidden_dim, out_dim)\n",
    "        self.weightInit(np.sqrt(1.0 / hidden_dim))\n",
    "    \n",
    "    def forward(self, x) :\n",
    "        out, _ = self.lstmLayer(x)\n",
    "        out = self.relu(out)\n",
    "        out = out[12:]\n",
    "        out = self.fcLayer(out)\n",
    "        return out\n",
    "    \n",
    "    # 初始化权重\n",
    "    def weightInit(self, gain) :\n",
    "        for name, param in self.named_parameters():\n",
    "            if 'lstmLayer.weight' in name :\n",
    "                init.orthogonal(param)\n",
    "\n",
    "# 输入维度为1，输出维度为1，隐藏层维数为5, 定义LSTM层数为2\n",
    "lstm = cudAvl(lstmModel(1, 5, 1, 2))\n",
    "\n",
    "# 定义损失函数和优化函数\n",
    "\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = optim.Adam(lstm.parameters(), lr = 1e-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([119, 1, 1]) torch.Size([107, 1, 1])\n"
     ]
    }
   ],
   "source": [
    "# 处理输入\n",
    "\n",
    "train = train.reshape(-1, 1, 1)\n",
    "x = torch.from_numpy(train[:-1])\n",
    "y = torch.from_numpy(train[1:])[12:]\n",
    "print(x.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch[350/3500], Loss: 0.00549\n",
      "Epoch[700/3500], Loss: 0.00175\n",
      "Epoch[1050/3500], Loss: 0.00107\n",
      "Epoch[1400/3500], Loss: 0.00063\n",
      "Epoch[1750/3500], Loss: 0.00057\n",
      "Epoch[2100/3500], Loss: 0.00054\n",
      "Epoch[2450/3500], Loss: 0.00052\n",
      "Epoch[2800/3500], Loss: 0.00157\n",
      "Epoch[3150/3500], Loss: 0.00096\n",
      "Epoch[3500/3500], Loss: 0.00036\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f96585bff98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2min 19s, sys: 29.6 s, total: 2min 48s\n",
      "Wall time: 2min 53s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# 训练模型\n",
    "\n",
    "frq, sec = 3500, 350\n",
    "loss_set = []\n",
    "\n",
    "for e in range(1, frq + 1) :\n",
    "    inputs = cudAvl(Variable(x))\n",
    "    target = cudAvl(Variable(y))\n",
    "    #forward\n",
    "    output = lstm(inputs)\n",
    "    loss = criterion(output, target)\n",
    "    # update paramters\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    #print training information\n",
    "    print_loss = loss.data[0]\n",
    "    loss_set.append((e, print_loss))\n",
    "    if e % sec == 0 :\n",
    "        print('Epoch[{}/{}], Loss: {:.5f}'.format(e, frq, print_loss))\n",
    "\n",
    "# 作出损失函数变化图像\n",
    "pltX = np.array([loss[0] for loss in loss_set])\n",
    "pltY = np.array([loss[1] for loss in loss_set])\n",
    "plt.title('loss function output curve')\n",
    "plt.plot(pltX, pltY)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([143, 1, 1]) (131,) (143,)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f962e017208>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f965657fa90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lstm = lstm.eval()\n",
    "\n",
    "# 预测结果并比较\n",
    "\n",
    "px = real[:-1].reshape(-1, 1, 1)\n",
    "px = torch.from_numpy(px)\n",
    "ry = real[1:].reshape(-1)\n",
    "varX = cudAvl(Variable(px, volatile=True))\n",
    "py = lstm(varX).data\n",
    "py = np.array(py).reshape(-1)\n",
    "print(px.shape, py.shape, ry.shape)\n",
    "\n",
    "# 画出实际结果和预测的结果\n",
    "plt.plot(py[-24:], 'r', label='prediction')\n",
    "plt.plot(ry[-24:], 'b', label='real')\n",
    "plt.legend(loc='best')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
